// KarakterForm.cpp : implementation file
//

#include "stdafx.h"
#include "EBASApp.h"
#include "KarakterForm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CKarakterForm

IMPLEMENT_DYNCREATE(CKarakterForm, CFormView)

CKarakterForm::CKarakterForm()
	: CFormView(CKarakterForm::IDD)
{
	//{{AFX_DATA_INIT(CKarakterForm)
	m_karakterGuid = _T("");
	m_karakterNavn = _T("");
	m_skalaGuid = _T("");
	m_skalaNavn = _T("");
	//}}AFX_DATA_INIT

	m_pSkala = NULL;
	m_pKarakter = NULL;
}

CKarakterForm::~CKarakterForm()
{

}

void CKarakterForm::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CKarakterForm)
	DDX_Control(pDX, IDC_LIST_VALGTE, m_valgteKarakterer);
	DDX_Control(pDX, IDC_LIST_SKALA, m_skalaer);
	DDX_Text(pDX, IDC_EDIT_KARAKTER_GUID, m_karakterGuid);
	DDX_Text(pDX, IDC_EDIT_KARAKTER_NAVN, m_karakterNavn);
	DDX_Text(pDX, IDC_EDIT_SKALA_GUID, m_skalaGuid);
	DDX_Text(pDX, IDC_EDIT_SKALA_NAVN, m_skalaNavn);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CKarakterForm, CFormView)
	//{{AFX_MSG_MAP(CKarakterForm)
	ON_LBN_DBLCLK(IDC_LIST_SKALA, OnDblclkListSkala)
	ON_BN_CLICKED(IDC_BUTTON2, OnButtonFjern)
	ON_BN_CLICKED(IDC_BUTTON3, OnButtonTilfoej)
	ON_LBN_DBLCLK(IDC_LIST_VALGTE, OnDblclkListValgte)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CKarakterForm diagnostics

#ifdef _DEBUG
void CKarakterForm::AssertValid() const
{
	CFormView::AssertValid();
}

void CKarakterForm::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CKarakterForm message handlers


void CKarakterForm::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();

	IUnknown * pUnk = NULL; 
	ULONG fetched = NULL;

	try {
		m_pEnumSkala.CreateInstance(__uuidof(EBASDLLLib::EnumKarakterSkala));
		m_pEnumSkala->Next(&pUnk, &fetched);
		while (NULL != pUnk) {
			EBASDLLLib::IKarakterSkalaPtr pSkala = NULL;
			pUnk->QueryInterface(__uuidof(EBASDLLLib::IKarakterSkala), (void**)&pSkala);
			pUnk = NULL;

			m_skalaer.AddString(pSkala->Navn);
			pSkala= NULL;

			m_pEnumSkala->Next(&pUnk, &fetched);
		}

		m_pEnumKarakter.CreateInstance(__uuidof(EBASDLLLib::EnumKarakter));
	} catch (...) {

	}

	UpdateData(FALSE);
}

void CKarakterForm::OnDblclkListSkala() 
{
	UpdateData();

	IUnknown * pUnk = NULL; 
	ULONG fetched = NULL;

	try {
		CString text;
		int sel = m_skalaer.GetCurSel();
		m_skalaer.GetText(sel, text);

		m_valgteKarakterer.ResetContent();

		m_pSkala = m_pEnumSkala->findKarakterSkalaNavn(bstr_t(text));
		if (NULL == m_pSkala)
			return;

		m_skalaGuid = (char*)m_pSkala->GUID;
		m_skalaNavn = (char*)m_pSkala->Navn;

		EBASDLLLib::IKarakterSkala * pSkala = NULL;
		m_pEnumKarakter->findKarakterKarakterSkala(m_pSkala);
		m_pEnumKarakter->Next(&pUnk, &fetched);
		while (NULL != pUnk) {
			EBASDLLLib::IKarakterPtr pKarakter = NULL;
			pUnk->QueryInterface(__uuidof(EBASDLLLib::IKarakter), (void**)&pKarakter);
			pUnk = NULL;

			m_valgteKarakterer.AddString(pKarakter->Karakter);
			pKarakter = NULL;

			m_pEnumKarakter->Next(&pUnk, &fetched);
		}

		m_karakterGuid = "";
		m_karakterNavn = "";
	} catch (...) {

	}
	
	UpdateData(FALSE);
}

void CKarakterForm::OnSlet()
{
	UpdateData();

	try {
		if (NULL == m_pSkala)
			return;

		m_pSkala->Slet();

		int pos = m_skalaer.GetCurSel();
		m_skalaer.DeleteString(pos);
		m_skalaGuid = "";
		m_skalaNavn = "";
	} catch (...) {

	}

	UpdateData(FALSE);
}

void CKarakterForm::OnRyd()
{
	UpdateData();

	try {
		m_skalaer.SetCurSel(-1);
		m_valgteKarakterer.ResetContent();
		m_skalaGuid = "";
		m_skalaNavn = "";
		m_karakterGuid = "";
		m_karakterNavn = "";

		m_pSkala = NULL;
		m_pKarakter = NULL;
	} catch (...) {

	}

	UpdateData(FALSE);
}

void CKarakterForm::OnGem()
{
	UpdateData();

	try {
		if (NULL == m_pSkala)
			m_pSkala = CEBASAppApp::gpEbasSession->OpretKarakterSkala();
		else {			
			int pos = m_skalaer.GetCurSel();
			m_skalaer.DeleteString(pos);
		}

		m_pSkala->Navn = bstr_t(m_skalaNavn);
		m_pSkala->SetInfo();

		m_skalaer.AddString(m_skalaNavn);
	} catch (...) {

	}

	UpdateData(FALSE);
}

void CKarakterForm::OnButtonFjern() 
{
	UpdateData();

	try {
		CString str;
		int pos = -1;

		pos = m_valgteKarakterer.GetCurSel();
		m_valgteKarakterer.GetText(pos, str);
		
		m_pKarakter = m_pEnumKarakter->findKarakter(bstr_t(str));
		if (NULL == m_pKarakter)
			return;

		m_pKarakter->Slet();
		m_pKarakter = NULL;

		m_karakterNavn = "";
		m_karakterGuid = "";

		m_valgteKarakterer.DeleteString(pos);
	} catch (...) {

	}
	
	UpdateData(FALSE);	
}

void CKarakterForm::OnButtonTilfoej() 
{
	UpdateData();

	try {
		m_pKarakter = CEBASAppApp::gpEbasSession->OpretKarakter();
		if (NULL == m_pKarakter)
			return;

		m_pKarakter->Karakter = bstr_t(m_karakterNavn);
		m_pKarakter->KarakterSkala = m_pSkala;
		m_pKarakter->SetInfo();

		m_karakterGuid = (char*)m_pKarakter->GUID;

		int pos = m_valgteKarakterer.FindString(-1, m_karakterNavn);
		if (-1 < pos)
			m_valgteKarakterer.DeleteString(pos);

		m_valgteKarakterer.AddString(m_karakterNavn);
	} catch (...) {

	}
	
	UpdateData(FALSE);	
}

void CKarakterForm::OnDblclkListValgte() 
{
	UpdateData();

	IUnknown * pUnk = NULL; 
	ULONG fetched = NULL;

	try {
		CString text;
		int sel = m_valgteKarakterer.GetCurSel();
		m_valgteKarakterer.GetText(sel, text);

		m_pKarakter = m_pEnumKarakter->findKarakter(bstr_t(text));
		if (NULL == m_pKarakter)
			return;

		m_karakterGuid = (char*)m_pKarakter->GUID;
		m_karakterNavn = (char*)m_pKarakter->Karakter;
	} catch (...) {

	}
	
	UpdateData(FALSE);		
}
